# 编译器设置
CXX := g++
TARGET := app.exe  # Windows可执行文件后缀

# 自动扫描当前目录下的所有cpp文件
SRCS := $(wildcard *.cpp)
OBJS := $(patsubst %.cpp,build/%.o,$(SRCS))

# 包含目录
INCLUDES := -Iinclude -Inlohmann

# 编译器标志
CXXFLAGS := -Wall -O2 $(INCLUDES)

# 链接器标志 - 添加静态链接
# 注意：-static 应该已经包含了 -static-libgcc 和 -static-libstdc++ 的效果
LDFLAGS := -static

# 跨平台命令配置
ifeq ($(OS),Windows_NT)
    RM := del /Q /F
    MKDIR := mkdir
    RMDIR := rmdir /S /Q
else
    RM := rm -f
    MKDIR := mkdir -p
    RMDIR := rm -rf
endif

# 默认目标（添加目录创建依赖）
$(TARGET): $(OBJS)
	$(CXX) -o $@ $^ $(LDFLAGS)

# 带自动目录创建的编译规则
build/%.o: %.cpp | build
	$(CXX) $(CXXFLAGS) -c $< -o $@

# 创建构建目录
build:
	@$(MKDIR) build

# 清理规则（保留源文件）
.PHONY: clean
clean:
	$(RM) $(TARGET)
	$(RMDIR) build

# 添加一个运行目标，用于编译后直接运行程序
.PHONY: run
run: $(TARGET)
	./$(TARGET)